import {
	CACHE_USERINFO,
	CACHE_TOKEN,
	CACHE_EXPIRES_TIME
} from '../../config.js';
import Util from '../../utils/util.js';
import {
	getLogo
} from '../../api/api.js';
import {
	login
} from '../../api/user.js';

let app = getApp();

Component({
	properties: {
		iShidden: {
			type: Boolean,
			value: true,
		},
		//是否自动登录
		isAuto: {
			type: Boolean,
			value: true,
		},
		isGoIndex: {
			type: Boolean,
			value: true,
		},
	},
	data: {
		cloneIner: null,
		loading: false,
		errorSum: 0,
		errorNum: 3,
		canIUseGetUserProfile: false // 判断是否为最新获取用户信息函数
	},
	attached() {
		this.get_logo_url();
		this.setAuthStatus();
		if (wx.getUserProfile) {
			this.setData({
				canIUseGetUserProfile: true
			})
		}
	},
	methods: {
		close() {
			let pages = getCurrentPages();
			let currPage = pages[pages.length - 1];
			if (this.data.isGoIndex) {
				wx.switchTab({
					url: '/pages/index/index'
				});
			} else {
				this.setData({
					iShidden: true
				});
				if (currPage && currPage.data.iShidden != undefined) {
					currPage.setData({
						iShidden: true
					});
				}
			}
		},
		get_logo_url: function() {
			var that = this;
			if (wx.getStorageSync('logo_url')) return this.setData({
				logo_url: wx.getStorageSync('logo_url')
			});
			getLogo().then(res => {
				wx.setStorageSync('logo_url', res.data.logo_url);
				that.setData({
					logo_url: res.data.logo_url
				});
			});
		},
		//检测登录状态并执行自动登录
		setAuthStatus() {
			var that = this;
			Util.chekWxLogin().then((res) => {
				let pages = getCurrentPages();
				let currPage = pages[pages.length - 1];
				if (currPage && currPage.data.iShidden != undefined) {
					currPage.setData({
						iShidden: true
					});
				}
				if (res.isLogin) {
					if (!Util.checkLogin()) return Promise.reject({
						authSetting: true,
						msg: '用户token失效',
						userInfo: res.userInfo
					});
					that.triggerEvent('onLoadFun', app.globalData.userInfo);
				} else {
					wx.showLoading({
						title: '正在登录中'
					});
					that.setUserInfo(res.userInfo, true);
				}
			}).catch(res => {
				if (res.authSetting === false) {
					//没有授权不会自动弹出登录框
					if (that.data.isAuto === false) return;
					//自动弹出授权
					that.setData({
						iShidden: false
					});
				} else if (res.authSetting) {
					//授权后登录token失效了
					that.setUserInfo(res.userInfo);
				}
			})
		},
		// 获取用户信息
		getUserProfile() {
			let that = this;
			wx.showLoading({
				title: '正在登录中'
			});
			wx.getUserProfile({
				desc: '用于完善会员资料', // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
				success: (res) => {
					Util.getCodeLogin((code) => {
						let userInfo = res;
						userInfo.code = code.code;
						that.getWxUserInfo(userInfo);
					})
				},
				fail: (err) => {
					wx.hideLoading();
				}
			});
		},
		//授权
		setUserInfo(userInfo, isLogin) {
			let that = this;
			wx.showLoading({
				title: '正在登录中'
			});
			if (isLogin) {
				that.getWxUserInfo(userInfo);
			} else {
				wx.hideLoading();
				that.setData({
					iShidden: false
				});
			}
		},
		getWxUserInfo: function(userInfo) {
			let that = this;
			userInfo.spread_spid = app.globalData.spid; //获取推广人ID
			userInfo.spread_code = app.globalData.code; //获取推广人分享二维码ID
			login(userInfo).then(res => {
				app.globalData.token = res.data.token;
				app.globalData.isLog = true;
				app.globalData.userInfo = res.data.userInfo;
				app.globalData.expiresTime = res.data.expires_time;
				wx.setStorageSync(CACHE_TOKEN, res.data.token);
				wx.setStorageSync(CACHE_EXPIRES_TIME, res.data.expires_time);
				wx.setStorageSync(CACHE_USERINFO, JSON.stringify(res.data.userInfo));
				if (res.data.cache_key) wx.setStorage({
					key: 'cache_key',
					data: res.data.cache_key
				});
				//取消登录提示
				wx.hideLoading();
				//关闭登录弹出窗口
				that.setData({
					iShidden: true,
					errorSum: 0
				});
				//执行登录完成回调
				that.triggerEvent('onLoadFun', app.globalData.userInfo);
			}).catch((err) => {
				wx.hideLoading();
				that.data.errorSum++;
				that.setData({
					errorSum: that.data.errorSum
				});
				if (that.data.errorSum >= that.data.errorNum) {
					Util.Tips({
						title: err
					});
				} else {
					that.setUserInfo(userInfo);
				}
			});
		}
	},
})
